#Boa:Frame:Frame1

import wx
import wx.grid
import consultasBD
import utiles
import servers
from decimal import Decimal

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1BUTTON2, wxID_FRAME1BUTTON3, 
 wxID_FRAME1CHECKBOX1, wxID_FRAME1GRID1, wxID_FRAME1PANEL1, 
 wxID_FRAME1RADIOBUTTON1, wxID_FRAME1RADIOBUTTON2, wxID_FRAME1RADIOBUTTON3, 
 wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, wxID_FRAME1STATICTEXT3, 
 wxID_FRAME1STATICTEXT4, wxID_FRAME1TEXTCTRL1, wxID_FRAME1TEXTCTRL2, 
 wxID_FRAME1TEXTCTRL3, wxID_FRAME1TEXTCTRL4, 
] = [wx.NewId() for _init_ctrls in range(18)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(48, 87), size=wx.Size(930, 484),
              style=wx.DEFAULT_FRAME_STYLE,
              title='Verifica tablas de Productos / Stock / PTC')
        self.SetClientSize(wx.Size(922, 457))

        self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
              pos=wx.Point(0, 0), size=wx.Size(922, 457),
              style=wx.TAB_TRAVERSAL)

        self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
              label='Casa Central', name='staticText1', parent=self.panel1,
              pos=wx.Point(232, 8), size=wx.Size(62, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL1, name='textCtrl1',
              parent=self.panel1, pos=wx.Point(304, 8), size=wx.Size(176, 21),
              style=0, value='')

        self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
              label='Parana', name='staticText2', parent=self.panel1,
              pos=wx.Point(488, 8), size=wx.Size(34, 13), style=0)

        self.textCtrl2 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL2, name='textCtrl2',
              parent=self.panel1, pos=wx.Point(536, 8), size=wx.Size(176, 21),
              style=0, value='')

        self.staticText3 = wx.StaticText(id=wxID_FRAME1STATICTEXT3,
              label='Saska', name='staticText3', parent=self.panel1,
              pos=wx.Point(232, 32), size=wx.Size(28, 13), style=0)

        self.textCtrl3 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL3, name='textCtrl3',
              parent=self.panel1, pos=wx.Point(304, 32), size=wx.Size(176, 21),
              style=0, value='')

        self.staticText4 = wx.StaticText(id=wxID_FRAME1STATICTEXT4,
              label='Peatonal', name='staticText4', parent=self.panel1,
              pos=wx.Point(488, 32), size=wx.Size(42, 13), style=0)

        self.textCtrl4 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL4, name='textCtrl4',
              parent=self.panel1, pos=wx.Point(536, 32), size=wx.Size(176, 21),
              style=0, value='')

        self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label='Buscar',
              name='button1', parent=self.panel1, pos=wx.Point(728, 8),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscar, id=wxID_FRAME1BUTTON1)

        self.button3 = wx.Button(id=wxID_FRAME1BUTTON3, label='Procesar',
              name='button3', parent=self.panel1, pos=wx.Point(838, 8),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnProcesar, id=wxID_FRAME1BUTTON3)

        self.button2 = wx.Button(id=wxID_FRAME1BUTTON2, label='Salir',
              name='button2', parent=self.panel1, pos=wx.Point(838, 48),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_FRAME1BUTTON2)

        self.checkBox1 = wx.CheckBox(id=wxID_FRAME1CHECKBOX1,
              label='Conexion remota (directo a sucursales)', name='checkBox1',
              parent=self.panel1, pos=wx.Point(16, 8), size=wx.Size(208, 13),
              style=0)
        self.checkBox1.SetValue(False)
        self.checkBox1.Bind(wx.EVT_CHECKBOX, self.OnCheckBox,
              id=wxID_FRAME1CHECKBOX1)

        self.radioButton1 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON1,
              label='Productos', name='radioButton1', parent=self.panel1,
              pos=wx.Point(16, 56), size=wx.Size(72, 13), style=0)
        self.radioButton1.SetValue(True)
        self.radioButton1.Bind(wx.EVT_RADIOBUTTON, self.OnRadioButton,
              id=wxID_FRAME1RADIOBUTTON1)

        self.radioButton2 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON2,
              label='Producto_Talle_Color', name='radioButton2',
              parent=self.panel1, pos=wx.Point(88, 56), size=wx.Size(128, 13),
              style=0)
        self.radioButton2.SetValue(False)
        self.radioButton2.Bind(wx.EVT_RADIOBUTTON, self.OnRadioButton,
              id=wxID_FRAME1RADIOBUTTON2)

        self.radioButton3 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON3,
              label='Stock', name='radioButton3', parent=self.panel1,
              pos=wx.Point(216, 56), size=wx.Size(56, 13), style=0)
        self.radioButton3.SetValue(False)
        self.radioButton3.Bind(wx.EVT_RADIOBUTTON, self.OnRadioButton,
              id=wxID_FRAME1RADIOBUTTON3)

        self.grid1 = wx.grid.Grid(id=wxID_FRAME1GRID1, name='grid1',
              parent=self.panel1, pos=wx.Point(16, 80), size=wx.Size(896, 360),
              style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.inicializarServidores()
        self.crearGrillas()
        self.button1.SetFocus()

    def OnSalir(self, event):
        self.Close()

    def OnCheckBox(self, event):
        if self.checkBox1.GetValue():
            print "Buscar en servidores remotos"
        else:
            print "Buscar en archivos backupeados"
        self.inicializarServidores()
        self.button1.SetFocus()

    def inicializarServidores(self):
        if self.checkBox1.GetValue():
            self.textCtrl1.SetLabel(servers.vpn_host[0])
            self.textCtrl2.SetLabel(servers.vpn_host[1])
            self.textCtrl3.SetLabel(servers.vpn_host[2])
            self.textCtrl4.SetLabel(servers.vpn_host[3])
        else:
            self.textCtrl1.SetLabel(servers.vpn2_host[0])
            self.textCtrl2.SetLabel(servers.vpn2_host[1])
            self.textCtrl3.SetLabel(servers.vpn2_host[2])
            self.textCtrl4.SetLabel(servers.vpn2_host[3])
        
    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)

    def crearGrillas(self):
        #suc,codsussan,proveedor,descri,preciolt1,preciolt2,estacion,anio,grupo,preciocompra
        #0   1         2         3      4         5         6        7    8     9           
        columnas = ['suc','codsussan','proveedor','descri','preciolt1',\
                    'preciolt2','estacion','anio','grupo','preciocompra',\
                    ]
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)
        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.EnableEditing(False)
        self.ajustarAnchoColumnas()
        self.grid1.Refresh()
        self.button1.SetFocus()

    def limpiarGrilla(self):
        self.grid1.ClearGrid()
        for i in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()

    def OnRadioButton(self, event):
        print "Cambiando a tabla",
        for col in xrange(self.grid1.GetNumberCols()):
            self.grid1.DeleteCols()
        if self.radioButton1.GetValue():
            print "PRODUCTOS"
            #suc,codsussan,proveedor,descri,preciolt1,preciolt2,estacion,anio,grupo,preciocompra
            #0   1         2         3      4         5         6        7    8     9           
            columnas = ['suc','codsussan','proveedor','descri','preciolt1',\
                        'preciolt2','estacion','anio','grupo','preciocompra',\
                        ]
            self.grid1.AppendCols(len(columnas))
            for i, col in enumerate(columnas): 
                self.grid1.SetColLabelValue(i, col)
        elif self.radioButton2.GetValue():
            print "PRODUCTO_TALLE_COLOR"
            #suc,id,codsussan,talle,color
            #0   1  2         3     4    
            columnas = ['suc','id (PTC)','codsussan','talle','color']
            self.grid1.AppendCols(len(columnas))
            for i, col in enumerate(columnas): 
                self.grid1.SetColLabelValue(i, col)
        else:
            print "STOCK"
            #suc,ptc,sucursal,stock
            #0   1   2        3    
            columnas = ['suc','ptc','sucursal','stock']
            self.grid1.AppendCols(len(columnas))
            for i, col in enumerate(columnas): 
                self.grid1.SetColLabelValue(i, col)
        self.limpiarGrilla()
        self.ajustarAnchoColumnas()
        self.grid1.Refresh()

    def verificaDuplicado(self,sucursal,dato1,dato2="",dato3="",dato4=""):
        for fil in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(fil,0)=="":continue
            if self.radioButton1.GetValue():
                c1 = self.grid1.GetCellValue(fil,0)
                c2 = self.grid1.GetCellValue(fil,1)
                if c1 == sucursal and c2 == dato1:
                    return True
            elif self.radioButton3.GetValue():
                c1 = self.grid1.GetCellValue(fil,0)
                c2 = self.grid1.GetCellValue(fil,1)
                c3 = self.grid1.GetCellValue(fil,2)
                if c1 == sucursal and c2 == dato1 and c3 == dato2:
                    return True
            else: #ptc
                c1 = self.grid1.GetCellValue(fil,0)
                c2 = self.grid1.GetCellValue(fil,1)
##                c3 = self.grid1.GetCellValue(fil,2)
##                c4 = self.grid1.GetCellValue(fil,3)
##                c5 = self.grid1.GetCellValue(fil,4)
                if c1 == sucursal and c2 == dato1:# and c3 == dato2 and \
##                   c4 == dato3 and c5 == dato4:
                    return True
                
        return False

    def publicar(self,sucursal,datos):
        fila = self.grid1.GetNumberRows()-1
        if self.radioButton1.GetValue():
        #suc,codsussan,proveedor,descri,preciolt1,preciolt2,estacion,anio,grupo,preciocompra
        #0   1         2         3      4         5         6        7    8     9           
            if self.verificaDuplicado(sucursal,str(datos["codsussan"])):
                return
            self.grid1.SetCellValue(fila,0,sucursal)
            self.grid1.SetCellValue(fila,1,str(datos["codsussan"]))
            self.grid1.SetCellValue(fila,2,str(datos["proveedor"]))
            self.grid1.SetCellValue(fila,3,str(datos["descri"]))
            self.grid1.SetCellValue(fila,4,str(datos["preciolt1"]))
            self.grid1.SetCellValue(fila,5,str(datos["preciolt2"]))
            self.grid1.SetCellValue(fila,6,str(datos["estacion"]))
            self.grid1.SetCellValue(fila,7,str(datos["anio"]))
            self.grid1.SetCellValue(fila,8,str(datos["grupo"]))
            self.grid1.SetCellValue(fila,9,str(datos["preciocompra"]))
        elif self.radioButton2.GetValue():
        #suc,id,codsussan,talle,color
        #0   1  2         3     4    
            if self.verificaDuplicado(sucursal,str(datos["id"]),str(datos["codsussan"]),str(datos["talle"]),str(datos["color"])):
                return
            self.grid1.SetCellValue(fila,0,sucursal)
            self.grid1.SetCellValue(fila,1,str(datos["id"]))
            self.grid1.SetCellValue(fila,2,str(datos["codsussan"]))
            self.grid1.SetCellValue(fila,3,str(datos["talle"]))
            self.grid1.SetCellValue(fila,4,str(datos["color"]))
        else:
        #suc,ptc,sucursal,stock
        #0   1   2        3    
            if self.verificaDuplicado(sucursal,str(datos["ptc"]),str(datos["sucursal"])):
                return
            self.grid1.SetCellValue(fila,0,sucursal)
            self.grid1.SetCellValue(fila,1,str(datos["ptc"]))
            self.grid1.SetCellValue(fila,2,str(datos["sucursal"]))
            self.grid1.SetCellValue(fila,3,str(datos["stock"]))
        self.grid1.AppendRows()

    def OnBuscar(self, event):
        print "BUSCAR DATOS"
        sucursales = [1,2,3,4]
        if self.radioButton1.GetValue():
            consultaSQL = "SELECT * FROM productos WHERE 1 "
            indice = "codsussan"
        elif self.radioButton2.GetValue():
            consultaSQL = "SELECT * FROM producto_talle_color WHERE 1 "
            indice = "id"
        else:
            consultaSQL = "SELECT * FROM stock WHERE 1 "
            indice = "ptc"
            
        if self.checkBox1.GetValue():
            print "Conexion remota con Central =>",
            resultadosCentral,coneCentral = consultasBD.ordenCrudaDictRemota(consultaSQL,0)
        else:
            print "Conexion con servidor local (Central) =>",
            resultadosCentral,coneCentral = consultasBD.ordenCrudaDictRemota2(consultaSQL,0)
        if not coneCentral:
            print "No hay resultados o no hubo conexion con Central"
            return
        
        if self.checkBox1.GetValue():
            print "Conexion remota con Parana =>",
            resultadosParana,coneParana = consultasBD.ordenCrudaDictRemota(consultaSQL,1)
        else:
            print "Conexion con servidor local (Parana) =>",
            resultadosParana,coneParana = consultasBD.ordenCrudaDictRemota2(consultaSQL,1)
        if not coneParana:
            print "No hay resultados o no hubo conexion con Parana"
            return
            
        if self.checkBox1.GetValue():
            print "Conexion remota con Saska =>",
            resultadosSaska,coneSaska = consultasBD.ordenCrudaDictRemota(consultaSQL,2)
        else:
            print "Conexion con servidor local (Saska) =>",
            resultadosSaska,coneSaska = consultasBD.ordenCrudaDictRemota2(consultaSQL,2)
        if not coneSaska:
            print "No hay resultados o no hubo conexion con Saska"
            return

        if self.checkBox1.GetValue():
            print "Conexion remota con Peatonal =>",
            resultadosPeatonal,conePeatonal = consultasBD.ordenCrudaDictRemota(consultaSQL,3)
        else:
            print "Conexion con servidor local (Peatonal) =>",
            resultadosPeatonal,conePeatonal = consultasBD.ordenCrudaDictRemota2(consultaSQL,3)
        if not conePeatonal:
            print "No hay resultados o no hubo conexion con Saska"
            return

        totCentral = len(resultadosCentral)
        totParana = len(resultadosParana)
        totSaska = len(resultadosSaska)
        totPeatonal = len(resultadosPeatonal)

        scentral = {}
        sparana = {}
        ssaska = {}
        speatonal = {}

        print "Procesando BD Central"
        for item in resultadosCentral:
            miindice = item[indice]
            scentral[miindice] = item
        print "Procesando BD Parana"
        for item in resultadosParana:
            miindice = item[indice]
            sparana[miindice] = item
        print "Procesando BD Saska"
        for item in resultadosSaska:
            miindice = item[indice]
            ssaska[miindice] = item
        print "Procesando BD Peatonal"
        for item in resultadosPeatonal:
            miindice = item[indice]
            speatonal[miindice] = item

        tCentral = 0
        tParana = 0
        tSaska = 0
        tPeatonal = 0

        print "Procesando indices Central"
        #localizo "indice" que existe en central y no otros locales
        for item in scentral:
            indice = item
            try:
                aux = sparana[indice]
            except:
                #no existe "indice" en parana
                self.publicar("2",scentral[indice])
                tParana+= 1
            try:
                aux = ssaska[indice]
            except:
                #no existe "indice" en saska
                self.publicar("3",scentral[indice])
                tSaska+= 1
            try:
                aux = speatonal[indice]
            except:
                #no existe "indice" en peatonal
                self.publicar("4",scentral[indice])
                tPeatonal+= 1

        print "Procesando indices Parana"
        #localizo "indice" que existe en parana y no otros locales
        for item in sparana:
            indice = item
            try:
                aux = scentral[indice]
            except:
                #no existe "indice" en central
                self.publicar("1",sparana[indice])
                tCentral+= 1
            try:
                aux = ssaska[indice]
            except:
                #no existe "indice" en saska
                self.publicar("3",sparana[indice])
                tSaska+= 1
            try:
                aux = speatonal[indice]
            except:
                #no existe "indice" en peatonal
                self.publicar("4",sparana[indice])
                tPeatonal+= 1

        print "Procesando indices Saska"
        #localizo "indice" que existe en saska y no otros locales
        for item in ssaska:
            indice = item
            try:
                aux = scentral[indice]
            except:
                #no existe "indice" en central
                self.publicar("1",ssaska[indice])
                tCentral+= 1
            try:
                aux = sparana[indice]
            except:
                #no existe "indice" en parana
                self.publicar("2",ssaska[indice])
                tParana+= 1
            try:
                aux = speatonal[indice]
            except:
                #no existe "indice" en peatonal
                self.publicar("4",ssaska[indice])
                tPeatonal+= 1
            
        print "Procesando indices Peatonal"
        #localizo "indice" que existe en speatonal y no otros locales
        for item in speatonal:
            indice = item
            try:
                aux = scentral[indice]
            except:
                #no existe "indice" en central
                self.publicar("1",speatonal[indice])
                tCentral+= 1
            try:
                aux = sparana[indice]
            except:
                #no existe "indice" en parana
                self.publicar("2",speatonal[indice])
                tParana+= 1
            try:
                aux = ssaska[indice]
            except:
                #no existe "indice" en saska
                self.publicar("3",speatonal[indice])
                tSaska+= 1

        self.ajustarAnchoColumnas()

        print totCentral,totParana,totSaska,totPeatonal
        print tCentral,tParana,tSaska,tPeatonal
        print totCentral+tCentral,totParana+tParana,totSaska+tSaska,totPeatonal+tPeatonal

    def OnProcesar(self, event):
        print "Procesando actualizaciones"
        if self.radioButton1.GetValue():
            tabla = "productos"
        elif self.radioButton2.GetValue():
            tabla = "producto_talle_color"
        else:
            table = "stock"

        f1=open("c:\\erpsussan.doc\\"+tabla+"central.txt","w")
        f2=open("c:\\erpsussan.doc\\"+tabla+"parana.txt","w")
        f3=open("c:\\erpsussan.doc\\"+tabla+"saska.txt","w")
        f4=open("c:\\erpsussan.doc\\"+tabla+"peatonal.txt","w")
        
        for fil in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(fil,0)=="":continue
            sucu = self.grid1.GetCellValue(fil,0)
            if sucu =="1":
                f=f1
            elif sucu =="2":
                f=f2
            elif sucu =="3":
                f=f3
            else:
                f=f4
                
            if self.radioButton1.GetValue():
            #suc,codsussan,proveedor,descri,preciolt1,preciolt2,estacion,anio,grupo,preciocompra
            #0   1         2         3      4         5         6        7    8     9           
                codsussan = self.grid1.GetCellValue(fil,1)
                proveedor = self.grid1.GetCellValue(fil,2)
                descri = self.grid1.GetCellValue(fil,3)
                preciolt1 = self.grid1.GetCellValue(fil,4)
                preciolt2 = self.grid1.GetCellValue(fil,5)
                estacion = self.grid1.GetCellValue(fil,6)
                anio = self.grid1.GetCellValue(fil,7)
                grupo = self.grid1.GetCellValue(fil,8)
                preciocompra = self.grid1.GetCellValue(fil,8)
                r1 = "INSERT INTO productos(codsussan,proveedor,descri,preciolt1,preciolt2,"
                r2 = "estacion,anio,grupo,preciocompra) "
                r3 = "VALUES ('%s','%s','%s','%s'," % (codsussan,proveedor,descri,preciolt1)
                r4 = "'%s','%s','%s','%s','%s');" % (preciolt2,estacion,anio,grupo,preciocompra)
                sql = r1+r2+r3+r4
            elif self.radioButton2.GetValue():
            #suc,id,codsussan,talle,color
            #0   1  2         3     4    
                id = self.grid1.GetCellValue(fil,1)
                codsussan = self.grid1.GetCellValue(fil,2)
                talle = self.grid1.GetCellValue(fil,3)
                color = self.grid1.GetCellValue(fil,4)
                r1 = "INSERT INTO producto_talle_color(id,codsussan,talle,color) "
                r2 = "VALUES('%s','%s','%s','%s');" % (id,codsussan,talle,color)
                sql = r1+r2
            else:
            #suc,ptc,sucursal,stock
            #0   1   2        3    
                ptc = self.grid1.GetCellValue(fil,1)
                sucursal = self.grid1.GetCellValue(fil,2)
                stock = self.grid1.GetCellValue(fil,3)
                r1 = "INSERT INTO stock(ptc,sucursal,stock) "
                r2 = "VALUES('%s','%s','%s');" % (ptc,sucursal,stock)
                sql = r1+r2
                
            f.write(sql+"\n")
        
        f1.close()
        f2.close()
        f3.close()
        f4.close()
        
        print "Fin creacion de archivos"
        print "Insertelos manualmente"
        